const {app, BrowserWindow} = require('electron')
const path = require('path')
const {ipcMain} = require("electron/main")
const {crashReporter} = require('electron')
const {existsSync, mkdirSync} = require("node:fs");

// 配置崩溃报告
crashReporter.start({
    productName: 'YourApp',
    companyName: 'YourCompany',
    uploadToServer: false, // 不上传到远程服务器
    extra: {
        'someKey': 'someValue' // 可以添加额外的自定义信息
    }
});

app.commandLine.appendSwitch('lang', 'en-US')

// 设置崩溃报告的保存路径
const crashReportsDir = path.join("./crash-reports")
if (!existsSync(crashReportsDir)) {
    mkdirSync(crashReportsDir);
}

// electron 主窗口
let mainWindow
const windowWidth = 1000
const windowHeight = 650

// 所有页面
const pageEnum = {
    HOME: 0,
    CRAWLER_EDIT: 1,
    CRAWLER_MANAGE: 2,
    CRAWLER_DETAIL: 3,
    CRAWLER_EXEC: 4,
}


function createWindow() {
    mainWindow = new BrowserWindow({
        width: windowWidth,
        height: windowHeight,
        webPreferences: {
            webviewTag: true,  // 启用 webview 标签
            preload: path.join(__dirname, 'preload.js'),
        },
        autoHideMenuBar: true,
    })

    mainWindow.loadFile('pages/home/home.html')

}

app.whenReady().then(() => {
    ipcMain.on('switchPage', (event, to, param) => {
        switchPage(to, param)
    })

    createWindow()

    app.on('activate', function () {
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

app.on('window-all-closed', function () {
    if (process.platform !== 'darwin') app.quit()
})

// 禁止webview中跳转时创建新窗口，而是在原有位置继续显示
app.on('web-contents-created', (event, contents) => {
    if (contents.getType() === 'webview') {
        contents.setWindowOpenHandler(({url}) => {
            contents.loadURL(url);
            return {action: "deny"};
        });
    }
})


// 用于处理页面切换的函数
async function switchPage(toPage, param) {
    if (mainWindow) {
        switch (toPage) {
            case pageEnum.HOME:
                mainWindow.unmaximize()
                mainWindow.setSize(windowWidth, windowHeight);
                mainWindow.loadFile('pages/home/home.html');
                break
            case pageEnum.CRAWLER_EDIT:
                mainWindow.maximize()
                await mainWindow.loadFile('pages/crawler_edit/crawler_edit.html');
                // 告知newCrawler页面，爬虫任务的根URL集合，newCrawler页面需要据此进行流程图初始绘制
                // 这里一定要等上面的loadFile执行完成！！！否则预加载脚本可能未执行完成，导致该消息无法被消费
                mainWindow.webContents.send('sendRootUrl', param)
                break
            case pageEnum.CRAWLER_MANAGE:
                mainWindow.maximize()
                await mainWindow.loadFile('pages/crawler_manage/crawler_manage.html');
                mainWindow.webContents.send('sendAllCategories', param)
                break
            case pageEnum.CRAWLER_DETAIL:
                mainWindow.maximize()
                await mainWindow.loadFile('pages/crawler_detail/crawler_detail.html');
                mainWindow.webContents.send('sendTaskDetail', param)
                break
            case pageEnum.CRAWLER_EXEC:
                console.log(param)
                mainWindow.maximize()
                await mainWindow.loadFile('pages/crawler_exec/crawler_exec.html');
                mainWindow.webContents.send('sendTaskDetail', param)
                break
        }
    }
}
//
// const { app, BrowserWindow, dialog } = require('electron');
// const fs = require('fs');
// const path = require('path');
//
// let mainWindow;
//
// function createWindow() {
//     mainWindow = new BrowserWindow({
//         width: 800,
//         height: 600,
//         webPreferences: {
//             nodeIntegration: true,
//             contextIsolation: false
//         }
//     });
//
//     mainWindow.loadFile('index.html');
//
//     mainWindow.on('closed', function () {
//         mainWindow = null;
//     });
//
//     // 示例：在窗口加载完成后触发另存为对话框
//     mainWindow.webContents.on('did-finish-load', () => {
//         showSaveDialog();
//     });
// }
//
// function showSaveDialog() {
//     // 要保存的数据
//     const data = '这是要保存的示例数据。';
//
//     dialog.showSaveDialog(mainWindow, {
//         title: '另存为',
//         defaultPath: path.join(app.getPath('documents'), 'example.txt'),
//         filters: [
//             { name: '文本文件', extensions: ['txt'] },
//             { name: '所有文件', extensions: ['*'] }
//         ]
//     }).then(result => {
//         if (!result.canceled) {
//             const filePath = result.filePath;
//             fs.writeFile(filePath, data, 'utf8', (err) => {
//                 if (err) {
//                     console.error('保存文件时出错:', err);
//                 } else {
//                     console.log('文件保存成功:', filePath);
//                 }
//             });
//         }
//     }).catch(err => {
//         console.error('显示另存为对话框时出错:', err);
//     });
// }
//
// app.whenReady().then(() => {
//     createWindow();
//
//     app.on('activate', function () {
//         if (BrowserWindow.getAllWindows().length === 0) createWindow();
//     });
// });
//
// app.on('window-all-closed', function () {
//     if (process.platform!== 'darwin') app.quit();
// });